结合自己面试的一些经验和想法,整理了一个 J2EE 攻城狮应当具备的基本技术栈,也是在持续更新ing。
技能描述
硬技能:
- Java libs
- I/O & NIO
- String 等常用类
- java.concurrent.utils
- net,如 socket 相关
- java 中数据结构,如 map,list 等接口的实现类
- JVM
- JVM 内存结构
- GC,通常是原理和优化
- JMM
- web
- spring 系列
- ORM,mybatis or hibernate
- websocket
- tomcat
- 数据库 & 缓存
- redis,memcache or 其他
- MySQL or mariadb,或者 oracle 等其他数据库
- SQL
- 中间件
- rabbitmq
- 消息通讯
- RPC
- RESTFul
- 基础知识
- 算法
- 排序
- 查询
- 字符串处理
- 图
- linux 使用
- git or 其他版本管理
- 操作系统原理
- 计算机组成原理
- 算法
软技能:
- E 文文档阅读
- 源码阅读
- 抽象、设计
- 新语言,框架学习能力
- code review
- 团队合作能力
另外需要注意的就是常见的中间件通常会涉及到三个场景的解决方案,如:
- 高可用
- 高并发
- 分布式
上面是一个大概的题干,可能不全,后续会继续根据自己的经验来进行补充。在分析题干的过程当中,需要记住下面的几个点:
- 为什么要掌握这个技能?
- 如果我自己实现,怎么做?
- 开源 / 行业中有什么解决方案?对比来看的话,优缺点有什么?分别适合什么样的场景?
如果上面的问题了解、掌握的基本差不多了,那么接下来要做的可能就是从更高的维度去思考,如几种技术综合起来,可以解决什么场景、问题?